package com.yhn.shortlink.project.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yhn.shortlink.common.entity.LinkDO;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yhn.shortlink.project.dto.req.ShortLinkCreateReqDTO;
import com.yhn.shortlink.project.dto.req.ShortLinkPageReqDTO;
import com.yhn.shortlink.project.dto.req.ShortLinkUpdateReqDTO;
import com.yhn.shortlink.project.dto.resp.ShortLinkCreateRespDTO;
import com.yhn.shortlink.project.dto.resp.ShortLinkGroupCountQueryRespDTO;
import com.yhn.shortlink.project.dto.resp.ShortLinkPageRespDTO;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.util.List;

/**
* @author 86177
* @description 针对表【link】的数据库操作Service
* @createDate 2024-07-27 14:52:10
*/
public interface LinkService extends IService<LinkDO> {


    /**
     * 新增短链接
     * @param shortLinkCreateReqDTO 新增请求
     * @return 新增成功响应对象
     */
    ShortLinkCreateRespDTO addShortLink(ShortLinkCreateReqDTO shortLinkCreateReqDTO);

    /**
     * 分页查询链接
     * @param shortLinkPageReqDTO 分页查询请求参数
     * @return 短连接分页返回结果
     */
    IPage<ShortLinkPageRespDTO> pageShortLink(ShortLinkPageReqDTO shortLinkPageReqDTO);

    /**
     * 查询短链接分组数量
     * @param requestParam 短连接分组数量请求参数
     * @return 查询短链接分组数量响应
     */
    List<ShortLinkGroupCountQueryRespDTO> listGroupShortLinkCount(List<String> requestParam);

    /**
     * 修改短链接
     * @param shortLinkUpdateReqDTO 修改短链接请求
     * @return 是否修改成功
     */
    Boolean updateShortLink(ShortLinkUpdateReqDTO shortLinkUpdateReqDTO);

    /**
     * 短链接跳转
     * @param shortUri 短链接路径
     * @param response 响应
     * @param request 请求
     * @return 是否跳转成功
     */
    Boolean redirectLink(String shortUri, HttpServletResponse response, HttpServletRequest request) throws IOException;
}
